#ifndef BACKGROUNDMODEL_H
#define BACKGROUNDMODEL_H

#include "opencv2/core/core.hpp"

class BackGroundModel
{
public:
    virtual ~BackGroundModel(){}

    virtual cv::Mat& getBackground() = 0;

    virtual void reset() = 0;

    // adds an image for it to use in computing the background model
    // @return true if more images are needed and false if it has enough
    virtual bool addImage( const cv::Mat &image ) = 0;
    // computes the background model.  should only be called after addImage() returns false.
    virtual void computeModel() = 0;

    // Creates an image where 0 represents no movement and any other value is movement
    // Only call after computeModel() has been called
    virtual void findMovement( const cv::Mat &image , cv::Mat &movement  ) = 0;

};


#endif // BACKGROUNDMODEL_H
